package com.yequan.file.delete;

import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

/**
 * @author yequan
 * @date 2019/11/26
 */
public class DelsOfBetter {

    /**
     * 栈对象，存储文件对象
     */
    private static Stack<File> fileStack = new Stack<File>();
    /**
     * 入栈计数，计算当前目录层数
     */
    private static int count = 0;

    /**
     * 将File对象按层次结构压入栈中
     *
     * @param files
     */
    public static void filesToStack(File files) {
        //当前的文件(夹)压入栈中
        fileStack.push(files);
//        System.out.println(++count + "---" + files.getAbsolutePath() + "已入栈！");
        if (files.isDirectory() && files.list().length >= 1) {
            for (File f : files.listFiles()) {
                filesToStack(f);
            }
        }
    }

    public static Stack<File> getFileStack() {
        return fileStack;
    }

    /**
     * 删除全部的文件（夹）
     *
     * @param files
     */
    private static void delAll(File files) {
        //先压栈，后遍历
        filesToStack(files);
        File file = null;
        while (!fileStack.isEmpty() && (file = fileStack.pop()) != null) {
            if (file.delete()) {
                System.out.println("成功删除：" + file.getAbsolutePath());
            } else {
                System.out.println("删除：" + file.getName() + "失败！");
            }
        }
    }

    public static void main(String[] args) {
        File file = new File("F:\\Temp\\psdb-root1");
        long start = System.currentTimeMillis();
        filesToStack(file);
        System.out.println("耗时: " + (System.currentTimeMillis() - start) + " ms");
        System.out.println(fileStack.size());
//        List<File> files = fileStack.subList(0, fileStack.size());
//        System.out.println("--------------------------------------------------------");
//        Collections.reverse(files);
//        for (File f : files) {
//            System.out.println(f.getAbsolutePath());
//        }
//        System.out.println("请输入你要删除的目录/文件：");
//        String path = new Scanner(System.in).nextLine().trim();
//        long begin = System.nanoTime();
//        delAll(new File(path));
//        System.out.println("删除完成，耗时：" + (System.nanoTime() - begin) / 1000000L + "毫秒！");
    }


}
